package com.yuandian.management.vo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;


/**
 * agent配置信息加载类
 * 
 * @author fucx 2020-06-07
 */
public class AgentConfigManager {

    private static Logger logger = LoggerFactory.getLogger(AgentConfigManager.class);

    /**
     * 加载agentip表里面所有正常状态的ip到Set里面，--当页面有删除操作，需要更新这里的set，当有新的ip进来，需要更新这里的set。
     */
    public static CopyOnWriteArraySet<String> ipSet = new CopyOnWriteArraySet();

    /**
     * 把探针传过来的formatTime作为key，上面的ipSet作为value。
     * 1、探针传过来的数据，先根据formatTime查询timeMap里面是否为空，如果为空，那么判断是否超过4（阀值设置5分钟统计到数据库）分钟，
     * 如果超过4分钟，那么不对阀值判断是否异常和断采。如果不超过4分钟，新加一个formatTime作为key，上面的ipSet作为value。
     * 2、最后在5分钟的时候新进来的数据触发统计断采，同时清理timeMap里面前5分钟的数据。
     */
    public static ConcurrentHashMap<String, Set<String>> timeMap = new ConcurrentHashMap<String, Set<String>>();

    /**
     * 这里的map不进行clear操作，只进行update，所以避免性能不用线程安全的map
     * 把ip作为key，AgentIpPojo放到map里面。--当有新的ip进来，需要更新这里的map，同时更新agent_ip表，当前台删除或更新的时候要更新这里
     */
    public static Map<String, AgentIpPojo> agentIpMap = new HashMap<String, AgentIpPojo>();

    /**
     * 这里的map不进行clear操作，只进行update，所以避免性能不用线程安全的map 加载阀值表--当页面阀值有更新操作，那么需要更新这里的阀值。
     */
    public static Map<String, AgentThresholdPojo> agentThresholdMap = new HashMap<String, AgentThresholdPojo>();

    /**
     * 在阀值表t_agent_threshold默认配置的采集频率，不能修改
     */
    public static final String AGENT_COLLECTION_THRESHOLD = "agent_5_threshold";

}
